package local_server

// 导入必要的包
import (
	"context"  // 用于处理请求上下文和超时
	"log"      // 用于日志记录
	"net/http" // 用于构建HTTP服务器
	"os"       // 用于操作系统相关操作
	"time"     // 用于时间相关操作
)

// waitForShutdown 等待关闭信号并优雅关闭服务器
func waitForShutdown(quit chan os.Signal, server *http.Server) {
	// 阻塞等待系统信号，当接收到信号时继续执行后续代码
	<-quit
	// 执行服务器关闭流程
	shutdownServer(server)
}

// shutdownServer 优雅关闭服务器
func shutdownServer(server *http.Server) {
	// 打印服务器正在关闭的信息
	log.Printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-")
	log.Println("DEV服务器 -> 正在关闭...")
	// 创建一个带有 5 秒超时的上下文，用于控制服务器关闭的时间
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	// 确保在函数结束时取消上下文，释放资源
	defer cancel()
	// 优雅地关闭服务器，等待所有活跃连接处理完成或超时
	if err := server.Shutdown(ctx); err != nil {
		// 如果关闭服务器时出错，打印错误信息并终止程序
		log.Fatalf("DEV服务器[ERROR] -> %v", err)
	}
	// 打印服务器已安全关闭的信息
	log.Println("DEV服务器 -> 已安全关闭")
}
